﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class Date
{
public:
	// 1.⽆参构造函数
	// 可以认为是默认构造
	Date()
	{
		_year = 1;
		_month = 1;
		_day = 1;
	}



	// 2.带参构造函数
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}


	// 3.全缺省构造函数
	// 可以认为是默认构造
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}



	void Print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}

	int GetYear()
	{
		return _year;
	}
private:
	int _year;
	int _month;
	int _day;
};


int main()
{
	// 如果留下三个构造中的第⼆个带参构造，第⼀个和第三个注释掉
	// 编译报错：error C2512: “Date”: 没有合适的默认构造函数可⽤


	Date d1; // 调⽤默认构造函数
	d1.Print();
	//-858993460/-858993460/-858993460			---		默认构造输出结果


	//Date d2(2025, 1, 1); // 调⽤带参的构造函数
	//d2.Print();


	// 注意：如果通过⽆参构造函数创建对象时，对象后⾯不⽤跟括号，否则编译器⽆法区分这⾥是函数声明还是实例化对象
	// warning C4930: “Date d3(void)”: 未调⽤原型函数(是否是有意⽤变量定义的?)
	// Date d3();

	return 0;
}
